knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
#echo = true means to show the code chunks

library(tidyverse)
library(here)
library(sf)
library(tmap)

#update.packages will update the packages, ask = FALSE means it won't ask for each one

read in the data

cmd - alt - i to insert new code chunk

sf_trees <- read_csv(here("data", "sf_trees", "sf_trees.csv"))

part 1: wrangling and ggplot review

Example 1: find counts of observation by legal_status & wrangle a bit

#method e: group_by() %>%  summarize
sf_trees %>% 
  group_by(legal_status) %>% 
  summarize(tree_count = n())
## # A tibble: 10 × 2
##    legal_status                 tree_count
##    <chr>                             <int>
##  1 DPW Maintained                   141725
##  2 Landmark tree                        42
##  3 Permitted Site                    39732
##  4 Planning Code 138.1 required        971
##  5 Private                             163
##  6 Property Tree                       316
##  7 Section 143                         230
##  8 Significant Tree                   1648
##  9 Undocumented                       8106
## 10 <NA>                                 54
#method 2: different way plus a few new functions
top_5_status <- sf_trees %>% 
  count(legal_status) %>% 
  drop_na(legal_status) %>% 
  rename(tree_count = n) %>% 
  relocate(tree_count) %>% 
  slice_max(tree_count, n = 5) %>% 
  arrange(tree_count)

Make a graph of the top 5 from above:

ggplot(data = top_5_status, aes(x = fct_reorder(legal_status, tree_count), y = tree_count)) +
  geom_col(fill = "darkgreen") +
  labs(x = "Legal Status", y = "Tree Count") +
  coord_flip() +
  theme_minimal()

Example 2: Only going to keep observations where legal status is “Permitted Site” and caretaker is “MTA” and store as permitted_data_df

permitted_data_df <- sf_trees %>% 
  filter(legal_status == "Permitted Site", #vertical line instead of a comma means OR
         caretaker == "MTA")

Example 3: Only keep blackwood acacia trees, and then only keep columns legal_status, date, latitude, longitude, and store as blackwood_acacia_df

blackwood_acacia_df <- sf_trees %>% 
  filter(str_detect(species, "Blackwood Acacia")) %>% 
  select(legal_status, date, lat = latitude, lon = longitude)

#make a little graph of locations
ggplot(data = blackwood_acacia_df, aes(x = lon, y = lat)) +
  geom_point(color = "darkgreen")

Example 4: Use tidyr :: separate()

sf_trees_sep <- sf_trees %>% 
  separate(species, into = c("spp_scientific", "spp_common"), sep = "::")

Example 5: Use tidyr :: unite()

ex_5 <- sf_trees %>% 
  unite("id_status", tree_id, legal_status, sep = "_cool_")

Part 2: make some maps

Step 1: Convert the lat/lon to spatial point, sf::st_as_sf()

blackwood_acacia_sf <- blackwood_acacia_df %>% 
  drop_na(lat, lon) %>% 
  st_as_sf(coords = c("lon", "lat"))

#we need to tell R what the coordinate reference system is
st_crs(blackwood_acacia_sf) <- 4326

ggplot(data = blackwood_acacia_sf) +
  geom_sf(color = "darkgreen") +
  theme_minimal()

Read in the SF shapefile and add to map

sf_map <- read_sf(here("data", "sf_map", "tl_2017_06075_roads.shp"))

sf_map_transform <- st_transform(sf_map, 4326)

ggplot(data = sf_map_transform)+
  geom_sf()

Combine the maps!

ggplot()+ 
  geom_sf(data = sf_map_transform,
          size = 0.1,
          color = "darkgrey")+
  geom_sf(data = blackwood_acacia_sf,
          color = "darkgreen",
          size = 0.5) +
  theme_void() +
  labs(title = "Blackwood acacias in SF")

Now an interactive map

tmap_mode("view")

tm_shape(blackwood_acacia_sf) +
  tm_dots()